Uno de los roles más comunes en el diseño de videojuegos es el de creación de mapas/niveles, este módulo está pensado para reforzar vuestra habilidad como creadores de estos contenido
Saber crear de principio a fin niveles con una buena base técnica (objetivo, ideación, despliegue, comprobación…)
La ideación abstracta de mecánicas y dinámicas se vuelve concreta cuando hacemos nivel:
Las implementaciones disponibles ya os la damos hechas
No hace falta que cambiéis nada, pero no está prohibido
Están basadas en contenido core de UE para facilitar documentación y modificación
Haremos las prácticas en grupos de 2 o 3 personas
Tenéis libertad para crear grupos, pero los equipos en los que se combine capacidad de programación con capacidad de diseño, generalmente, funcionarán mejor
Aparte del nivel implementado, un documento que describa:
Ayuda mucho dar un concepto único de nivel:
Implementación del MVP con las ideas principales
Si se van a introducir mecánicas, éste es el momento
Los desarrolladores no sirven como sujetos de prueba
Las primeras pruebas deberían servirnos para descubrir cuál es el funcionamiento general del nivel con usuarios externos
A partir de los datos de las "Pruebas I", generamos un nivel "feature complete", con todo lo que buscamos, aún sin pulir métricas
Pero preparado para sacar datos y pulir
Si se van a introducir elementos estéticos, lo ideal es hacerlo aquí
Todo terminado y pulido
Las variables tienen los valores ya ajustados, y hemos aplicado los cambios de las Pruebas I y II
El juego es "el ideal", y ahora vamos a comprobar que se cumplen
La conclusión tiene que ser:
He comprobado que en mi nivel ocurre lo que yo quería que ocurriera
Tras cada prototipo final, se hará una presentación del desarrollo en clase
Dos tipos de pruebas:
Ambos tipos de pruebas son importantes y necesarios, y nos dan información complementaria sobre el nivel
Aunque no es estrictamente necesario, se pueden traer mandos (gamepads) para probar los juegos, principalmente para el dual-stick
Todos los parámetros de personajes, nivel y demás que se puedan usar para equilibrar están puestos en la categoría "Game" en UE
Un .zip, enviado por correo electrónico, con:
Y, en general, todo lo relevante y todo lo que hemos ideo apuntando
La idea es que la entrega sea el material que se ha hecho en clase (con algunas mejoras donde tenga sentido)
El objetivo es no quitaros más tiempo de lo necesario fuera de las sesiones
La entrega se hará 14 días después de la última sesión
Recordad: intentad enviar lo que se ha hecho en clase (lo podéis retocar después), no es necesario avanzar mucho más los niveles
Whiteboxing (también greyboxing, block out, brushes o brush actors) es el proceso de crear los volúmenes de un nivel, sin tener en cuenta los detalles (las mallas 3D)
Es el borrador de un nivel, en el que crearemos y experimentaremos con es espacio, distancias, tamaños, etc
Es una técnica muy buena para saber qué se quiere antes de "vestir" el nivel entero:
Veamos algunos aspectos básicos para crear geometría en UE
(Más información en la documentación de UE)
Figura 1: En UE se incluye la geometría como cualquier otro objeto de escena
Figura 2: Los objetos de whiteboxing se pueden rotar, mover y escalar como cualquier Actor
Figura 3: Los objetos tendrán, directamente, una malla de colisión que corresponderá a su geometría
En teoría se puede cambiar la colisión con solidity, pero no funciona bien
Figura 4: Podemos pasar al modo de edición de geometría a través del menú superior
Figura 5: En este modo (Brush Editing) los vértices de los objetos son editables y puedo cambiar la forma de las mallas
Figura 6: Barra de herramientas de edición simple de geometría
Figura 7: Las operaciones booleanas me permiten "sumar" o "restar"
Es muy útil añadir colores (materiales) a los bloques para indicar su semántica:
Figura 8: Para colorear geometría brush, elegimos el objeto, luego todas sus caras (Shift-J) y arrastramos material
Figura 9: Es muy útil añadir distancias y elementos unitarios
En esta parte se va a trabajar en la creación de un nivel para un juego de mecánicas clásicas y sencillas de arcade desplazamiento lateral
Sigue un sistema básico 2D en un nivel de desplazamiento abierto (se puede ir a cualquier parte dentro de la zona delimitada)
Desplazamiento lateral sencillo (izquierda/derecha), a una velocidad parametrizable
El personaje puede agacharse, reduciendo su altura a un multiplicador (parámetro)
Salto sencillo, de altura parametrizable
Es posible añadir movimiento lateral al salto (es decir, cambiar la dirección en el aire), parametrizable respecto a la velocidad básica en el suelo
En el atributo Possible jumps se puede cambiar el número de saltos que se pueden dar en el aire (1, 2, 3…)
Para cambiar la potencia de lanzamiento, se puede cambiar la variable Throw strength
Tenemos \(N\) puntos de vida (configurable como Life, puede ser que \(N=1\)), y el contacto con los enemigos que no daña nos resta puntos
El daño en configurable en el atributo Damage
Para cambiar la vida inicial, tenemos la variable Life (en el componente Damageable)
Si caemos por un agujero, perdemos todos los puntos de vida y la partida se reinicia (blueprint Deep)
Las gemas son coleccionables para el jugador
Se pueden usar como objetivo (maximizar gemas cogidas), o como condición para eventos
Al ser tocados, un elemento del escenario desaparece (¿una barrera?)
Es configurable en el atributo Barrier
El vigía va hacia derecha o izquierda hasta que se tope con un obstáculo (y entonces se da la vuelta) o hasta que caiga de una plataforma a otra inferior (y sigue moviéndose) o al vacío, y muere
Podemos eliminar enemigos de varias formas (cada golpe puede tener hacer distinto daño):
Cuando un enemigo es eliminado, desaparece de la escena
Figura 10: El nivel se acaba cuando llegamos al "portal de salida"
Buscamos un gameplay que explore la habilidad de control en los juegos
Hay que gestionar la frustración generada por castigo y dificultad para mantener el desafío sin perder al jugador
Possible jumps)
Time y HasTime en el game mode)Buscamos un gameplay en el que el jugador planee su movimiento y sus acciones, de forma más o menos inmediata (tenéis libertad para decidir)
Juego top-down, dual-stick en el que hay que atravesar una "mazmorra" de habitaciones
Movimiento WASD /palanca izquierda, se apunta con flechas de dirección o palanca derecha
Tenemos una serie de puntos de vida, como en el juego de scroll lateral
El daño funciona de la misma manera
Al recibir daño, hay un pequeño empuje configurable en PushDamage
Tenemos varias armas posibles
El arma normal tiene poca potencia y tiene munición infinita
(Todos los juegos necesitan una)
Cadencia de disparo baja, poca munición y ataque de dispersión
Más munición, cadencia de disparo muy alta
Hay munición global por cada arma, y munición en el cargador
Cuando se agota el cargador hay que recargar (activamente)
El tiempo de recarga (único para todas las armas) se encuentra en Recharging time
Cada arma hace un daño específico que puede configurarse en Weapon damage
En la clase del jugador hay varios Maps usados para configurar las armas:
MaxMagazine (las balas que caben en cada cargador)Weapon fire rate (cadencia de disparo por arma)Has (las armas que tiene)
Los enemigos se mueven a través de una malla de navegación (NavMesh)
Hacen un daño Damage done, en la clase Enemy (clase padre)
Te persigue y hace daño cuerpo a cuerpo
Se mueve mediante un árbol de comportamiento (que os explicarán más adelante)
En ShootTask está Distance threshold para la distancia a la que ataca
También Attack period que es el tiempo entre ataques
En los zombies hay también un parámetro llamado Distancia de deteccion que permite establecer la distancia del personaje principal a la que se activan
Si los tocas, te hacen daño
Se pueden coger un power-ups que cambia la velocidad (Speed thing) durante Super speed time segundos en Super speed quantity
Solo se pueden abrir con una llave (ver más adelante)
El nivel se acaba en el portal, igual que en juego 2D
Hacer un nivel FPS
El escenario será continuo, pero habrá 3 "zonas" o entornos diferentes
Nos faltarán modelos para diferenciar el entorno, pero lo sustituiremos con formas geométricas claras (brushes)
Figura 11: Bouba y kiki
En este nivel vamos a jugar con las dinámicas de percepción del entorno, y cómo se reacciona ante ellas
Las mecánicas van a ser las mismas que en el top-down, pero esta vez en primera persona
De hecho, puede ser interesante reutilizar las mecánicas que posiblemente hayáis añadido y comparar
El jugador aquí podrá también saltar (pero aquí no tiene más de un salto)
Figura 12: Se pueden migrar uassets entre proyectos
El valor de las historias en la experiencia de un videojuego es (como en casi todo) muy grande
Por tanto, vamos a contar, en nuestro nivel, una historia
En el proyecto hay ahora un blueprint NPC
Este componente tiene una componente de tipo TextRender que contiene un atributo Text que se mostrará cuando el jugador "hable" con el actor
Además, el texto se activa automáticamente cuando estamos a menos de Talking distance (distancia, en el personaje principal) y el texto dura Show time segundos en pantalla (en el NPC)
Vamos a usar un esquema clásico principio-nudo-desenlace (aunque si encontráis una razón buena para otro esquema, adelante)
La geometría tiene que encajar con la narrativa contada